package paket;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.PathSegment;

import entity.CekovnoPlacanje;
import entity.KreditnoPlacanje;
import entity.Kupac;
import entity.NacinPlacanja;
import entity.Narudzbina;
import entity.Prodavac;
import entity.Proizvod;

import sesion.KupacDaoJpa;
import sesion.ProdavacDaoJpa;
import sesion.ProizvodDaoJpa;

@Path("/radProizvodi/")
public class RadSaProizvodima {
	ProdavacDaoJpa prodavacDaoJpa=new ProdavacDaoJpa();
	ProizvodDaoJpa proizvodDaoJpa=new ProizvodDaoJpa();
	KupacDaoJpa kupacDaoJpa=new KupacDaoJpa();
	
	 @POST
	 @Path("/dodajProizvod/{naziv}/{opis}/{cena}/{nazivProdavca}") 
	 public void dodajProizvod(@PathParam ("naziv") String naziv, @PathParam ("opis") String opis, @PathParam ("cena") int cena,@PathParam ("nazivProdavca") String nazivProdavca)
	 {
		 if(proizvodDaoJpa.pronadjiProizvodNaziv(naziv).equals("nista"))
		 {
			 Prodavac pom=prodavacDaoJpa.pronadjiProdavca(nazivProdavca);
			 pom.dodajProizvod(new Proizvod(naziv, opis, cena));
			 prodavacDaoJpa.update(pom);
		 }
		 else
			 System.out.println("Vec postoji proizvod sa zadatim nazivom");
	 }
	 
	 @POST
	 @Path("/promeniProizvod/{naziv}/{opis}/{cena}")
	 public void izmeniProizvod(@PathParam ("naziv") String naziv, @PathParam ("opis") String opis, @PathParam ("cena") int cena)
	 {
		 proizvodDaoJpa.izmeniProizvod(naziv, opis, cena);
	 }
	 
	 @GET
	 @Produces({"application/json"})
	 @Path("/vratiProizvode")
	 public List<Proizvod> dajProizvode()
	 {
		 return proizvodDaoJpa.findAll();
	 }
	 
	 @DELETE
	 @Path("/izbrisiProizvod/{naziv}")
	 public void ukloniProizvod(@PathParam ("naziv") String naziv)
	 {
		 proizvodDaoJpa.izbrisiProizvod(naziv);
	 }
	 
	 @POST
	 @Consumes({"application/json"})
	 @Path("/kreditnoPlacanje/{nazivProdavca}/{broj}/{tip}")
	 public void placanjeKreditno(@PathParam ("nazivProdavca") String nazivKupca, ArrayList<Proizvod> dobio,@PathParam ("broj") String broj,@PathParam ("tip") String tip)
	 {
		 NacinPlacanja nacinPlacanja=new KreditnoPlacanje(broj, tip, new Date());
		 ArrayList<String> proizvodiKupujemo=new ArrayList<String>();
		 for (Proizvod pom : dobio) {
			 proizvodiKupujemo.add(pom.getNaziv());
		 }
		 placanje(nazivKupca, proizvodiKupujemo, nacinPlacanja);
	 }
	 
	 @POST
	 @Consumes({"application/json"})
	 @Path("/cekovnoPlacanje/{nazivProdavca}/{ime}/{bankinId}")
	 public void placanjeCekovno(@PathParam ("nazivProdavca") String nazivKupca, ArrayList<Proizvod> dobio,@PathParam ("ime") String ime,@PathParam ("bankinId") String bankinId)
	 {
		 NacinPlacanja nacinPlacanja=new CekovnoPlacanje(ime, bankinId);
		 ArrayList<String> proizvodiKupujemo=new ArrayList<String>();
		 for (Proizvod pom : dobio) {
			 proizvodiKupujemo.add(pom.getNaziv());
		 }
		 
		 placanje(nazivKupca, proizvodiKupujemo, nacinPlacanja);
	 }
	 
	 public void placanje(String nazivKupca,ArrayList<String> dobio,NacinPlacanja nacinPlacanja)
	 {
		 Kupac kupac=kupacDaoJpa.pronadjiKupaca(nazivKupca);
		 if(kupac!=null)
		 {
			 List<Proizvod> proizvodi=proizvodDaoJpa.pronadjiProdavceveProizvode(dobio);
			 if(proizvodi.size()>0)
			 {
				 Narudzbina narudzbina=new Narudzbina();
				 for (Proizvod proizvod : proizvodi) {
					 narudzbina.dodajProizvodiNarudzbina(new Proizvod(proizvod));
				 }
				 narudzbina.setNacinPlacanja(nacinPlacanja);
				 kupac.dodajNarudzbinu(narudzbina);
				 kupacDaoJpa.update(kupac);
			 }
		 }
	 }
	 
	 @POST
	 @Path("/placanje/{proizvodi}/{nazivKupca}/{prviPodatak}/{drugiPodatak}/{nacinPlacanja}")
	 public void placanjeDrugiNacin(@PathParam ("proizvodi") PathSegment proizvodi,@PathParam ("nazivKupca") String nazivKupca,@PathParam ("prviPodatak") String prviPodatak,@PathParam ("drugiPodatak") String drugiPodatak,@PathParam ("nacinPlacanja") String nacinPlacanja)
	 {
		 ArrayList<String> proizvodiKupujemo=new ArrayList<String>();
		 
		 for (String iterable_element : proizvodi.getMatrixParameters().keySet()) {
			 for(int i=0;i<proizvodi.getMatrixParameters().get(iterable_element).size();i++)
				 proizvodiKupujemo.add(iterable_element);
		 }
		 NacinPlacanja nacinPlacanjaKupca=null;
		 if(nacinPlacanja.contains("kreditno"))
			 nacinPlacanjaKupca=new KreditnoPlacanje(prviPodatak, drugiPodatak, new Date());
		 else
			 nacinPlacanjaKupca=new CekovnoPlacanje(prviPodatak, drugiPodatak);
		 
		 placanje(nazivKupca, proizvodiKupujemo, nacinPlacanjaKupca);
	 }
	 
	 
	 @GET
	 @Produces({"application/json"})
	 @Path("/vratiProdavacProizvode")
	 public List<Proizvod> dajProdavceveProizvode()
	 {
		 return proizvodDaoJpa.vratiProdavceveProizvode();
	 }
}
